#include <iostream>		//标准输入输出库
#include <string>		//字符串库
#include <unistd.h>		//unistd.h头文件包含了一些UNIX系统调用
#include <arpa/inet.h>	//arpa/inet.h头文件包含了一些网络相关的函数
#include <sys/types.h>	//sys/types.h头文件包含了一些系统数据类型
#include <sys/socket.h> //sys/socket.h头文件包含了套接字相关的函数
#include <netinet/in.h> //netinet/in.h头文件包含了一些常用的IP地址相关的函数
#include <arpa/inet.h>	//arpa/inet.h头文件包含了一些网络相关的函数

using namespace std;

int main()
{

	int sock = 0;
	int listenfd = 0;
	int ret = 0;
	bool ex = true;

	struct sockaddr_in addr;
	memset(&addr, 0, sizeof(addr));

	sock = socket(AF_INET, SOCK_STREAM, 0);
	if (sock == -1)
	{
		perror("sock");
		exit(-1);
	}

	addr.sin_family = AF_INET;
	addr.sin_port = htons(12345);
	addr.sin_addr.s_addr = inet_addr("112.124.33.221");

	ret = bind(sock, (struct sockaddr *)&addr, sizeof(struct sockaddr));
	if (ret == -1)
	{
		perror("bind");
		exit(-1);
	}

	listen(sock, 5);

	listenfd = accept(sock, NULL, NULL);
	if (listenfd == -1)
	{
		perror("accpet");
		exit(-1);
	}

	char buf1[1024] = {0};

	while (1)
	{
		ret = recv(listenfd, buf1, 1023, 0);
		if (ret == -1)
		{
			perror("recv");
			exit(-1);
		}

		printf("buf is %s\n", buf1);

		if (strcmp(buf1, "exit") == 0)
		{
			strcpy(buf1, "exit server! buy~");
			ex = false;
		}

		ret = send(listenfd, buf1, strlen(buf1), 0);
		if (ret == -1)
		{
			perror("send");
			exit(-1);
		}
		if (ex == false)
		{
			break;
		}
	}
	close(listenfd);
	close(sock);
}
